package cn.iocoder.yudao.module.system.util.agent;

import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 创建CusionInff内容
 */

@Data
public class SelectRulesUtils {




    //资源池赛选规则
    public static Map<String, Object> spaceRegionsRule(List<Map<String, Object>> regionsMap){
        Map<String,Object> resMap = new HashMap<>();
        //:todo 判断资源池是否可用。资源池可能会用尽
        for (Map<String, Object> map : regionsMap) {
            Object isSaleObj = map.get("isSale"); //0是不可售，1是可售
            if (isSaleObj != null) {
                //转换成Integer
                Integer isSale = (Integer) isSaleObj;
                Object zoneNameObj = map.get("zoneName");//使用天津3资源池。todo:还不知道怎么判断使用的是天津3
                if(zoneNameObj.equals("天津3资源池")){
                    resMap = map;
                    break;
                }
            }
        }
        //如果天津3资源池，就使用其他的资源池。返回第一个isSale为1的资源池。
        if(resMap.isEmpty()){
            //定义一个开关
            boolean key = true;
            //如果maps返回为null就使用其他资源池创建。如果还是null就保存订单信息,通知手动创建。
            for (Map<String, Object> map : regionsMap) {
                //返回第一个isSale为1的资源池。
                Object isSaleObj = map.get("isSale"); //0是不可售，1是可售
                if (isSaleObj != null) {
                    //转换成Integer
                    Integer isSale = (Integer) isSaleObj;
                    if(isSale == 1){
                        resMap  = map;
                        key = false;
                        break;
                    }
                }
            }
            if(key){
                //todo:资源池用尽之后怎么处理。
                throw new RuntimeException("资源池不足");
            }
        }
        return resMap;
    };

    //vpc选取规则
    public static Map<String, Object> vpcRule(List<Map<String, Object>> vpcs){
        Map<String,Object> resMap = new HashMap<>();
        //todo: 返回的是个list.使用的时候是个string.使用什么规则选取其中一个。
        //遍历vpcs 返回第一个vpcStatus为OK的结果
        for (Map<String, Object> vpc : vpcs) {
            if ("OK".equals(vpc.get("vpcStatus"))) {
                resMap = vpc;
                break;
            }
        }
        return resMap;
    }
    //子网选取规则
    public static String subnetRule(List<Map<String, Object>> subnets){
        String resVlanId = null;
        //todo: 返回的是个list.使用的时候是个string.使用什么规则选取其中一个。
        //遍历vpcs 返回第一个vlanStatus为ACTIVE的结果
        for (Map<String, Object> subnet : subnets) {
            if ("ACTIVE".equals(subnet.get("vlanStatus"))) {
                 resVlanId = subnet.get("resVlanId").toString();
            }
        }
        return resVlanId;
    };


}
